/*
 * Copyright 2008 Jeff Dwyer
 * 
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 * 
 * http://www.apache.org/licenses/LICENSE-2.0
 * 
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */
package com.apress.progwt.server.gwt;

class CharVector {
	private int capacityIncrement;
	private char chars[];
	private int size;

	public CharVector(int initialCapacity, int capacityIncrement) {
		assert (initialCapacity >= 0);
		assert (capacityIncrement >= 0);

		this.capacityIncrement = capacityIncrement;
		chars = new char[initialCapacity];
	}

	public void add(char ch) {
		if (size >= chars.length) {
			int growBy = (capacityIncrement == 0) ? chars.length * 2 : capacityIncrement;
			char newChars[] = new char[(chars.length + growBy)];
			System.arraycopy(chars, 0, newChars, 0, size);
			chars = newChars;
		}

		chars[size++] = ch;
	}

	public char[] asArray() {
		return chars;
	}

	public char get(int index) {
		assert (index < size);

		return chars[index];
	}

	public int getSize() {
		return size;
	}

	public void set(int index, char ch) {
		assert (index >= 0 && index < size);

		chars[index] = ch;
		++size;
	}
}
